#ifndef DEBUGFORM_H
#define DEBUGFORM_H

#include <QWidget>
#include <QClipboard>
#include "../DeviceControl.h"
#include "src/DataProvider/Test/MoniProvider.h"
#include <QStandardItemModel>
#include <QButtonGroup>
#include <QStringListModel>
#include <QSet>
#include <regex>
#include <map>
#include "src/DataProvider/Image/imgprovider.h"
#include "src/DataProvider/SQL/sqlProvider.h"
#include "./child/FrameCorrect.h"
#include "./child/CameraCorrect.h"
#include "./child/MachineCorrect.h"
#include "./child/PLCControl.h"
#include "./child/SQLFuse.h"
#include "UI/child/DebugPulic.h"
#include "navibutton.h"
#include "UI/child/ToolForm.h"
#include "UI/child/TubMove.h"
#include "src/DataProvider/App/SysMembers.h"
#include "UI/child/RobotSport.h"
#include "src/define/QtFcs.h"



namespace Ui {
class DebugForm;
}

class NaviButton;

class DebugForm : public QWidget
{
    Q_OBJECT

public:
    explicit DebugForm(QWidget *parent = nullptr);
    ~DebugForm();

    void updatePos(std::string f);
public slots:
    void indexClicked();
private:
    void initUIs();
    void updateGridList();          // 更新格点listview
    // void updateSportList();         // 更新运动队列
    RobotPos getCurrent();          // 获取UI界面选择的最新POS

    /**
     * @brief getCadBasePoint
     * @param seamid
     * @details
     * 查询一条seamid的basepoint
     */
    RobotPos getCadBasePoint(QString seamid);       // 获取Cad表的baspoint
    /**
     * @brief getToolTransBase
     * @param 获取工件坐标系的数据到TCP的变换矩阵
     * @warning
     * 变换参数在*定义
     */
    RobotPos     getToolTransBase(QString seamid);                    // 获取数据库motorposs,motorangle1s,motorangle2s
private slots:

    void on_pb_GenVect_clicked();

    void on_cb_table_activated(const QString &arg1);

    void on_cb_index_activated(const QString &arg1);

    void on_cb_seamid_activated(const QString &arg1);

    void on_pb_insertTask_clicked();

    void on_pb_removeTask_clicked();

    void on_pb_deleteCache_clicked();

    void on_pb_AddAll_clicked();

    void on_pb_clearCache_clicked();

    void on_pb_startTask_clicked();

    void on_pb_ys_clicked();

    void on_pb_yf_clicked();

    void on_pb_zs_clicked();

    void on_pb_zf_clicked();

    void on_pb_pos_clicked();

    void on_pb_axis_clicked();

    void on_pb_frameCorrect_clicked(bool checked);

    void on_pb_sport_clicked(bool checked);

    void on_pb_camera_clicked(bool checked);

    void on_pb_machine_clicked(bool checked);

    void on_pb_sql_clicked(bool checked);

    void on_pb_PLC_clicked(bool checked);

    void on_pb_copyPos_clicked();

    void on_cb_CAD_activated(const QString &arg1);

    void on_pb_Tools_clicked(bool checked);

    void on_pb_copyAxle_clicked();

    void on_pb_TubMove_clicked(bool checked);

    void on_pb_taskGo_clicked();

    void on_listView_Grid_clicked(const QModelIndex &index);

    void on_listView_Task_clicked(const QModelIndex &index);

    void on_pb_CreatUserPos_clicked();

    void on_pb_sport_Robot_clicked(bool checked);

    void on_pb_deleteTask_clicked();

    void on_pb_rule_clicked();

private:
    Ui::DebugForm *ui;

    // std::map<string,GenPosVector>  cacheGrid;    // 任务格点

    Singleton<DebugToolData> d_data;

private:
    /**
     * @brief UI
     * @details
     * 该private成员是关于UI控件的
     */
    FrameCorrect   *child_frame;        // 龙骨矫正窗体
    CameraCorrect  *child_camera;       // 相机矫正
    SQLFuse        *child_sql;          // 数据库融合
    MachineCorrect *child_machine;      // 变位机控制
    PLCControl     *child_plc;          // PLC控制
    ToolForm       *child_tool;         // 工具箱界面
    TubMove        *child_tubMove;      // TubMove界面
    RobotSport     *child_sport;        // 机器人运动界面


    QStandardItemModel *gridModel;      // 格点的缓存模型
    QStandardItemModel *taskModel;      // 格点的任务模型

    QList<NaviButton *> indexStackeds;

    QClipboard *clip;
    QStringListModel *CAD_model ;
    QStringListModel *seam_model ;      // combobox的模型
    QStringListModel *index_model ;



    GridPara       _para = {0,0,0,0};
    QString     cadName;
    RobotPos    newDBPos;           // 从数据库选择的新的pos
};

#endif // DEBUGFORM_H
